﻿Option Explicit On
Option Strict On

Imports System
Imports System.ServiceModel

Namespace ACOM2000

    ''' <summary>
    ''' Interface Defining the WCF Service Contract for the ACOM Controller
    ''' </summary>
    ''' <remarks></remarks>
    <ServiceContract(SessionMode:=SessionMode.Required, CallBackContract:=GetType(IControllerCallbacks), ProtectionLevel:=Net.Security.ProtectionLevel.None)> _
    Public Interface IController

        <OperationContract()> _
        Function GetCOMPort() As String

        <OperationContract()> _
        Function GetCOMPortOpen() As Boolean

        <OperationContract()> _
        Function GetSupportsRemotePowerOn() As Boolean

        <OperationContract()> _
        Function GetState() As ACOMDirector.Hardware.ACOM2000.AmplifierState

        <OperationContract()> _
        Function GetFeatureAvailabilityState() As FeatureAvailabilityState

        <OperationContract(IsOneway:=True, IsInitiating:=True)> _
        Sub SubscribeEvents()

        <OperationContract(IsOneway:=True, IsTerminating:=True)> _
        Sub UnsubscribeEvents()

        <OperationContract(IsOneWay:=True)> _
        Sub OperateStandby()

        <OperationContract(IsOneWay:=True)> _
        Sub OnOff()

        <OperationContract(IsOneWay:=True)> _
        Sub SelectAntenna(AntennaNumber As Integer)

        <OperationContract(IsOneWay:=True)> _
        Sub Connect()

        <OperationContract(IsOneWay:=True)> _
        Sub Disconnect()

        <OperationContract(IsOneWay:=True)> _
        Sub StartMeasuring(ByVal MetricA As MeasurementMetricTypes, ByVal MetricB As MeasurementMetricTypes)

        <OperationContract(IsOneWay:=True)> _
        Sub StopMeasuring()

        <OperationContract(IsOneWay:=True)> _
        Sub SetMetricB(ByVal Metric As MeasurementMetricTypes)

        <OperationContract(IsOneWay:=True)> _
        Sub SetMetricA(ByVal Metric As MeasurementMetricTypes)

        <OperationContract(IsOneWay:=True)> _
        Sub SetFrequencyBand(ByVal FrequencyHertz As Integer)

    End Interface

End Namespace